#3.设计一个图书馆管理系统，包含以下类：
# Book：表示一本书，包含属性 title、author、isbn 和 available。
# Member：表示图书馆会员，包含属性 name 和 member_id，以及方法 borrow_book 和 return_book。
# Library：表示图书馆，包含属性 books（一个包含所有书籍的列表）和 members（一个包含所有会员的列表），
# 以及方法 add_book、add_member、remove_book 和 remove_member。
# Librarian：表示图书管理员，继承自 Member，并包含额外的方法 add_book_to_library 和 remove_book_from_library。
# 要求:
# Book 类应该有一个方法 is_available，用于检查书籍是否可借。
# Member 类的 borrow_book 方法应该检查书籍是否可借，如果可借则将书籍标记为不可借，并将书籍添加到会员的借书列表中。
# Member 类的 return_book 方法应该将书籍标记为可借，并从会员的借书列表中移除。
# Library 类应该有一个方法 get_available_books，用于获取所有可借的书籍。
# Librarian 类应该能够添加和移除书籍，并且只有图书管理员才能执行这些操作。


class Book:
    def __init__(self,title,author,isbn):
        self.title=title
        self.author=author
        self.isbn=isbn
        self.available=True
    def is_available(self):
        return self.available

    def __str__(self):
        status="不可借出"
        if self.available:
            status="可借出"
        return f"书本:《{self.title}》,作者:{self.author},书本编号:{self.isbn},状态：{status}"

class Member:

    def __init__(self,name,member_id):
        self.name=name
        self.member_id=member_id
        self.member_borrow_books = []

    def borrow_book(self,book:Book):
        if book.available==True:
            self.member_borrow_books.append(book)
            book.available=False
        return book.available

    def return_book(self,book:Book):
        book.available=True
        self.member_borrow_books.remove(book)
        return book.available

    def add_book_to_library(self, *args, **kwargs):
        raise Exception("不是图书馆管理员，无法操作")

    def remove_book_from_library(self, *args, **kwargs):
        raise Exception("不是图书馆管理员，无法操作")
    def __str__(self):
        return f"会员名：{self.name},会员号：{self.member_id}"

    def __repr__(self):
        return f"会员姓名{self.name},会员编号为{self.member_id}"


class Library:
    def __init__(self):
        self.books:list[Book]=[]
        self.members:list[Member]=[]

    def add_book(self,book:Book):
        if book not in self.books:
            self.books.append(book)
            print(f"图书馆新增了书本,{book}")
        else:
            print(f"已经存在该书本,{book}")

    def add_member(self,member:Member):
        if member not in self.members:
            self.members.append(member)
            print(f"图书馆新增了会员,{member}")
        else:
            print(f"{member}添加失败")
    def remove_book(self,book:Book):
        if book in self.books:
            self.books.remove(book)
            print(f"图书馆删除了书本,{book}")
        else:
            print(f"{book}删除失败")
    def remove_member(self,member:Member):
        if member in self.members:
            self.members.remove(member)
            print(f"图书馆开除{member}")
        else:
            print(f"{member}存在")
    def get_available_books(self):
        # available_books=[]
        # for book in self.books:
        #     if book.available==True:
        #         available_books.append(book)
        return [book for book in self.books if book.available]

class Librarian(Member):
    def __init__(self, name, member_id):
        super().__init__(name, member_id)
    def add_book_to_library(self,book:Book,library:Library):
        library.add_book(book)
    def remove_book_from_library(self,book:Book,library:Library):
        library.remove_book(book)

if __name__ == '__main__':
    library=Library()
    librarian=Librarian("刘一",1)
    book_1=Book("《c语言》","姜林辰",1)
    member_1=Member("李四",10)
    member_2=Member("张三",11)
    library.add_book(book_1)
    library.add_member(member_1)
    library.add_member(member_2)